/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package muhnes.sizoo.validador;

import javax.faces.application.FacesMessage;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.validator.Validator;
import javax.faces.validator.ValidatorException;
 
public class CoordenadaValidator implements Validator {
    
    private final String patronDMS = "^(\\d{1,2})[°|º](\\d{1,2})'(\\d{1,2\\.\\d})''(N|S|E|W)$";
    private final String patronDecimal = "^-?\\d{1,2}(.\\d+)?$";
    
    @Override
    public void validate(FacesContext contexto, UIComponent componente, Object valor)
        throws ValidatorException {
        
        String opc = (String) componente.getAttributes().get("opcional");
        boolean opcional = opc != null && !opc.isEmpty() ? Boolean.parseBoolean(opc) : false;
         
        String coordenada = String.valueOf(valor);
        System.out.print(valor+"valor");
        System.out.print(opcional + "hola");
        System.out.print(coordenada +"ddd");
        System.out.print(patronDMS);
        System.out.print(patronDecimal +"dec");
       
        if( (coordenada == null || coordenada.isEmpty()) && !opcional ) {
            FacesMessage mensaje = new FacesMessage();
            mensaje.setSeverity( FacesMessage.SEVERITY_ERROR );
            mensaje.setSummary( "El campo no puede ser nulo." );
            mensaje.setDetail( "El campo es obligatorio y debe contener un valor." );
            contexto.addMessage( componente.getClientId(), mensaje );
            throw new ValidatorException( mensaje );
        }
        else if( (!coordenada.matches( patronDMS ) && !coordenada.matches( patronDecimal )) && !opcional ) {
            FacesMessage mensaje = new FacesMessage();
            mensaje.setSeverity( FacesMessage.SEVERITY_ERROR );
            mensaje.setSummary( "El campo no tiene el formato adecuado." );
            mensaje.setDetail( "El valor debe ser una coordenada en formato DMS o decimal" );
            contexto.addMessage( componente.getClientId(), mensaje );
            throw new ValidatorException( mensaje );
        }
    }
    
}
